home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / mouse.swg / 0012_Mouse Cursors.pas < prev    next >
Pascal/Delphi Source File  |  1994-01-27  |  3KB  |  74 lines

  1. {
  2. > I whant to draw a new mouse cursor, and the routines that I'm using will
  3. > allow me to do this by passing an array [0..31] of integer; I don't know
  4. > how to draw a cursor thought using this array. Some other routins have
  5. > predifined cursors, but that nubers are out of range.
  6.  
  7. Here's some explanation:
  8.  
  9. At the memory location where ES:DX points to, there have to be first 16
  10. words (the screen mask) followed by 16 words (the cursor mask).
  11.  
  12. The screen mask defines an AND with the background beneath the cursor, and
  13. the cursor mask defines a XOR with the background pixels.
  14.  
  15. - For each pixel use the following Equations:
  16.  
  17.  1. expand each mask-bit to the width needed to display one colored-pixel
  18.     in the used video-mode, e.g. if you are using mode $13 (320x200x256)
  19.     each mask-bit is expanded to 8 bits (one byte). If you are using
  20.     640x480x16, each mask-bit is expanded to 4 bits.
  21.  
  22.  2. Backgrd._pixel AND screen-mask_pixel XOR cursor-mask_pixel => new
  23.     pixel.
  24.  
  25. Example: (standard arrow-cursor)
  26.  
  27.             screen-mask       cursor-mask    |   cursor-form
  28.                                              |
  29.           1001111111111111  0000000000000000 | +00+++++++++++++
  30.           1000111111111111  0010000000000000 | +010++++++++++++
  31.           1000011111111111  0011000000000000 | +0110+++++++++++
  32.           1000001111111111  0011100000000000 | +01110++++++++++
  33.           1000000111111111  0011110000000000 | +011110+++++++++
  34.           1000000011111111  0011111000000000 | +0111110++++++++
  35.           1000000001111111  0011111100000000 | +01111110+++++++
  36.           1000000000111111  0011111110000000 | +011111110++++++
  37.           1000000000011111  0011111111000000 | +0111111110+++++
  38.           1000000000001111  0011111000000000 | +01111100000++++
  39.           1000000011111111  0011011000000000 | +0110110++++++++
  40.           1000100001111111  0010001100000000 | +01000110+++++++
  41.           1001100001111111  0000001100000000 | +00++0110+++++++
  42.           1111110000111111  0000000110000000 | ++++++0110++++++
  43.           1111110000111111  0000000110000000 | ++++++0110++++++
  44.           1111111000111111  0000000000000000 | +++++++000++++++
  45.                                              |
  46.  
  47. As you can easily see:
  48.  
  49.  
  50.     screen-mask | cursor-mask | new pixel
  51.    -------------+-------------+-----------
  52.         0       |      0      |  black
  53.         0       |      1      |  white
  54.         1       |      0      |  background visible
  55.         1       |      1      |  background inverted
  56.  
  57.  
  58. A quick example for the inverted background:
  59.  
  60. Lets say we have a 01101101 as a backgroundpixel, ok?
  61.  
  62.      1.       01101101
  63.           AND 11111111 (expanded) screen-mask-bit
  64.          -----------------------------------------
  65.               01101101 leaving the background-pixel untouched.
  66.  
  67.  
  68.      2.       01101101
  69.           XOR 11111111 (expanded) cursor-mask-bit
  70.          -----------------------------------------
  71.               10010010 inverted background pixel
  72.  
  73. }
  74.